﻿using System;
using System.Data.SqlClient;
using System.Linq;
using System.Windows.Forms;
using VentaElectrodomesticos.AbmCliente;
using VentaElectrodomesticos.AbmProducto;
using VentaElectrodomesticos.Login;
using VentaElectrodomesticos.Sql;
using VentaElectrodomesticos.Utilities;

namespace VentaElectrodomesticos.Facturacion
{
    public partial class FormFacturacion: Form
    {
       // private unUsuario usuario;

        private ClaseSQL sql;
        private Cliente cliente;
        private unUsuario usuario;

        public FormFacturacion(unUsuario usuario)
        {   
            InitializeComponent();

            this.usuario = usuario;
            sql = new ClaseSQL();

            sql.llenarCombo(cbProvincia, "SELECT idProvincia, nomProvincia FROM LAG.provincias");
            sql.llenarComboSimple(cbSucursal, "SELECT idSucursal FROM LAG.sucursales ORDER BY idSucursal");

            sql.Open();
            SqlDataReader reader = sql.busquedaSQLDataReader("SELECT nomProvincia FROM LAG.personas pe LEFT JOIN LAG.provincias pr ON pe.idProvincia = pr.idProvincia WHERE idPersona = "+usuario.idPersona);
            reader.Read();
            String provinciaSeleccionada = reader["nomProvincia"].ToString(); ;
            sql.Close();

            cbProvincia.SelectedIndex = cbProvincia.FindStringExact(provinciaSeleccionada);
            cbSucursal.SelectedIndex = cbSucursal.FindStringExact(usuario.idSucursal);

            if (usuario != null && usuario.idTipoUsuario.Equals("2"))
            {
                cbProvincia.Enabled = false;
                cbSucursal.Enabled = false;
            }
            
        }

        private void btnListadoProductos_Click(object sender, System.EventArgs e)
        {
            int idSucursal;
            int.TryParse(cbSucursal.SelectedItem.ToString(), out idSucursal);

            FormSeleccionProducto formSeleccionProducto = new FormSeleccionProducto(this, "facturacion", idSucursal);
            formSeleccionProducto.ShowDialog(this);
        }

        private void btnBuscarCliente_Click(object sender, System.EventArgs e)
        {
            FormSeleccionCliente formSeleccionCliente = new FormSeleccionCliente(this,"facturacion", false);
            formSeleccionCliente.ShowDialog();
        }

        public void recibirProducto(Producto producto, int cantidad)
        {
            bool yaExisteCodProd = false;

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if ( producto.codProducto.Equals( (int)row.Cells["codProducto"].Value ) )
                    yaExisteCodProd = true;
            }

            if (yaExisteCodProd)
            {
                MessageBox.Show("No se agrego el producto, porque ya estaba incluido", "Atencion!");
            }
            else
            {
                int precio = Convert.ToInt32(producto.precio);

                dataGridView1.Rows.Add(
                            producto.codProducto,
                            producto.nombre,
                            cantidad,
                            producto.marca,
                            precio,
                            precio * cantidad
                        );

                int suma = 0;
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    suma += (int)row.Cells["subtotales"].Value;
                }
                tbMontoTot.Text = suma.ToString();
            }
        }

        public void recibirCliente(Cliente cliente)
        {
            this.cliente = cliente;

            tbDni.Text = cliente.dni;
            tbNombre.Text = cliente.nombre;
            tbApellido.Text = cliente.apellido;
        }

        private void rBtnCuotas_CheckedChanged(object sender, EventArgs e)
        {
            if (rBtnCuotas.Checked)
            {
                tbCuotas.Enabled = true;
            }
            else
            {
                tbCuotas.Enabled = false;
                tbCuotas.Clear();
            }
        }

        private void btnFacturar_Click(object sender, EventArgs e)
        {
            if (this.validarCampos())
            {
                String listaItems = Utils.dgvToString(dataGridView1, "codProducto", "cantidad", "precioUnitario");

                String[,] parametros = new String[2, 7];
                String sp = "LAG.facturar";
                parametros[0, 0] = "@arg_idSucursal";
                parametros[1, 0] = usuario.idSucursal; //int
                parametros[0, 1] = "@arg_idCliente";
                parametros[1, 1] = cliente.id.ToString(); //int
                parametros[0, 2] = "@arg_idUsuario";
                parametros[1, 2] = usuario.idUsuario; //int
                parametros[0, 3] = "@arg_descuento";
                if (tbDescuento.Text.Equals(""))
                    parametros[1, 3] = "0";
                else
                    parametros[1, 3] = (Convert.ToDouble(tbDescuento.Text) * 0.01).ToString().Replace(',', '.');
                parametros[0, 4] = "@arg_total";
                parametros[1, 4] = tbMontoTot.Text;
                parametros[0, 5] = "@arg_cantCuotas";
                if (rBtnEfectivo.Checked)
                    parametros[1, 5] = "1";
                else
                    parametros[1, 5] = tbCuotas.Text;
                parametros[0, 6] = "@arg_listadoItems";
                parametros[1, 6] = listaItems;             

                sql.Open();
                SqlDataReader reader = sql.ejecutarStoredProcedure(sp, parametros);
                sql.Close();
                MessageBox.Show("Se ha registrado su factura");
                this.Close();
            }
            else
            {
                MessageBox.Show("Hay campos con datos no validos", "Error");
            }
        }

        

        private bool validarCampos()
        {
            bool vLisProd = !Utils.campoVacio(dataGridView1,errorProvider,"Seleccione al menos un producto");
            bool vCuotas = validarCuotas();
            bool vDescuento= validarDescuento();
            bool vCliente = validarCliente();

            return vLisProd && vCuotas && vDescuento && vCliente;
        }

        private bool validarCliente()
        {
            bool valido = true;
            if (cliente == null)
            {
                valido = false;
                errorProvider.SetError(gbCliente, "Seleccione un cliente");
            }
            else
            {
                errorProvider.SetError(gbCliente, "");
            }
            return valido;
        }

        private bool validarDescuento()
        {
            bool valido = true;
            int desc;
            int.TryParse(tbDescuento.Text, out desc);

            if (tbDni.Text.Trim().Length > 0 && desc > 30)
            {
                valido = false;
                errorProvider.SetError(tbDescuento, "Ingrese un numero entre 0 y 30");
            }
            else
            {
                errorProvider.SetError(tbDescuento, "");
            }

            return valido;
        }

        private bool validarCuotas()
        {
            bool valido = true;
            int cuotas;
            int.TryParse(tbCuotas.Text, out cuotas);

            if (rBtnCuotas.Checked)
            {
                if (tbCuotas.Text.Trim().Length == 0)
                {
                    valido = false;
                    errorProvider.SetError(tbCuotas, "Ingrese un numero de cuotas");
                }
                else if (cuotas < 2 || cuotas > 12)
                {
                    valido = false;
                    errorProvider.SetError(tbCuotas, "Ingrese un numero entre 2 y 12");
                }
                else
                {
                    errorProvider.SetError(tbCuotas, "");
                }
            }
            else
            {
                errorProvider.SetError(tbCuotas, "");
            }

            return valido;
        }

        private void ingresarSoloNumericos(object sender, KeyPressEventArgs e)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "[0-9\b]+"))
                e.Handled = true;
        }

    }
}
